package com.itheima.chapter08.stream;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Stream;

//中间操作方法
public class demo3 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("孙刘");
        list.add("张三");
        list.add("张三");
        //过滤
        //filter方法获取流中的每一个数据.
        //而test方法中的s,就依次表示流中的每一个数据.
        // 我们只要在test方法中对s进行判断就可以了，
        // 如果判断的结果为true,则当前的数据留下
        // 如果判断的结果为false,则当前数据就不要.
        list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                boolean result = s.startsWith("张");
                return result;
            }
        }).forEach(s-> System.out.println(s));
        System.out.println("-----------------");
        //因为predicate接口中只有一个抽象方法test
        //所以我们可以使用lambda表达式来简化
        list.stream().filter(
            (String s)-> {
                boolean result = s.startsWith("张");
                return result;
            }
        ).forEach(s-> System.out.println(s));
        System.out.println("-----------------");
        list.stream().filter(s->s.startsWith("张")).forEach(s-> System.out.println(s));
        System.out.println("-------------------");
       //截取
        list.stream().limit(2).forEach(s-> System.out.println(s));
        System.out.println("-------------------");
        //跳过
        list.stream().skip(3).forEach(s-> System.out.println(s));
        System.out.println("-------------------");
        //合并
        Stream<String> skip = list.stream().skip(4);
        Stream<String> limit = list.stream().limit(3);
        Stream.concat(skip,limit).forEach(s-> System.out.println(s));
        System.out.println("-------------------");
        //去重
        list.stream().distinct().forEach(s-> System.out.println(s));


    }
}
